/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package credit.paysystem;

import Modelo.Membresia;
import Modelo.Tipoduracion;
import java.math.BigDecimal;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.MenuButton;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javax.swing.JOptionPane;
import mx.its.LnLocal.MembresiaLnLocal;
import mx.its.LnLocal.TipoDuracionLnLocal;
import mx.its.ln.MembresiaLN;
import mx.its.ln.TipoDuracionLN;

/**
 * FXML Controller class
 *
 * @author Grnmnd
 */
public class MembresiasController implements Initializable {

    /**
     * Initializes the controller class.
     */
    @FXML
    ComboBox tiposcmbbx;
    @FXML
    Button editar;
    @FXML
    Button eliminar;
    @FXML
    AnchorPane VentanaMembresias;
    @FXML
    Button nuevo;
    @FXML
    TextField criterioBusqueda;
    @FXML
    ComboBox Campoduracion;
    @FXML
    Label Membresias;
    @FXML
    TableView TablaMembresias;
    @FXML
    TitledPane Internal;
    @FXML
    TextField CampoId;
    @FXML
    TextField CampoNombre;
    @FXML
    TextField CampoPrecio;
    @FXML
    Label Encabezado;
    @FXML
    Button Agregar;
    @FXML
    Button Guardar;
    Membresia mem;

    @FXML
    public void actualizarLsita() {

        TableColumn ID = new TableColumn("ID");
        ID.setCellValueFactory(
                new PropertyValueFactory<Membresia, String>("id"));

        TableColumn Nombre = new TableColumn("Nombre");
        Nombre.setCellValueFactory(
                new PropertyValueFactory<Membresia, String>("nombre"));
        Nombre.setPrefWidth(200);

        TableColumn Duracion = new TableColumn("Duracion");
        Duracion.setCellValueFactory(
                new PropertyValueFactory<Membresia, String>("duracion"));
        Duracion.setPrefWidth(200);

        TableColumn Tipo = new TableColumn("Tipo");
        Tipo.setCellValueFactory(
                new PropertyValueFactory<Membresia, String>("idTipoduracion"));
        Tipo.setPrefWidth(200);

        TableColumn Costo = new TableColumn("Costo");
        Costo.setCellValueFactory(
                new PropertyValueFactory<Membresia, String>("costo"));
        Costo.setPrefWidth(200);

        TableColumn Creada = new TableColumn("Fecha");
        Creada.setCellValueFactory(
                new PropertyValueFactory<Membresia, String>("fechaCreacion"));
        Creada.setPrefWidth(200);

        MembresiaLnLocal membresiaLnLocal = new MembresiaLN();

        List<Membresia> lst = new ArrayList<>();

        for (Membresia m : membresiaLnLocal.getTodo()) {
            lst.add(m);
        }

        ObservableList<Membresia> k = FXCollections.observableArrayList(lst);
        TablaMembresias.setItems(k);

        TablaMembresias.getColumns().setAll(ID, Nombre,Tipo, Duracion, Costo, Creada);


    }

    @FXML
    public void Agregar() {
        System.out.println("Agregar.....");
        MembresiaLnLocal membresiaLn = new MembresiaLN();
        Membresia memn = new Membresia();

        if (!CampoNombre.getText().isEmpty() && !CampoPrecio.getText().isEmpty()) {
            memn.setNombre(CampoNombre.getText());
            try {
                if (Double.parseDouble(CampoPrecio.getText()) > 0) {
                    memn.setCosto(BigDecimal.valueOf(Double.parseDouble(CampoPrecio.getText())));
                    memn.setDuracion((int) Campoduracion.getSelectionModel().getSelectedItem());
                    memn.setFechaCreacion(new Date());
                    memn.setIdTipoduracion((Tipoduracion) tiposcmbbx.getSelectionModel().getSelectedItem());
                    membresiaLn.agregar(memn);
                    int x = JOptionPane.showConfirmDialog(null, "REGISTRO COMPLETO \n ¿¿desea agregar otra membresia??");
                    if (x != 0) {
                        Cancelar();
                    }
                    CampoId.setText("");
                    CampoNombre.setText("");
                    CampoPrecio.setText("");
                    CampoNombre.requestFocus();
                } else {
                    JOptionPane.showMessageDialog(null, "Precio Invalido");
                }

            } catch (Exception m) {
                System.out.println(m);
                JOptionPane.showMessageDialog(null, "Precio Invalido");
            }
        } else {
            JOptionPane.showMessageDialog(null, "El campo nombre y precio no deben estar vacios");
        }
    }

    @FXML
    public void Guardar() {
        System.out.println("GUARDANDO CAMBIOS...");
        MembresiaLnLocal membresiaLn = new MembresiaLN();
        if (!CampoNombre.getText().isEmpty() && !CampoPrecio.getText().isEmpty()) {
            mem.setNombre(CampoNombre.getText());
            try {
                if (Double.parseDouble(CampoPrecio.getText()) > 0) {
                    mem.setCosto(BigDecimal.valueOf(Double.parseDouble(CampoPrecio.getText())));
                    mem.setDuracion((int) Campoduracion.getSelectionModel().getSelectedItem());
                    mem.setFechaCreacion(new Date());
                    mem.setIdTipoduracion((Tipoduracion) tiposcmbbx.getSelectionModel().getSelectedItem());
                    membresiaLn.editar(mem);
                    JOptionPane.showMessageDialog(null, "EDICION EXITOSA");
                    CampoId.setText("");
                    CampoNombre.setText("");
                    CampoPrecio.setText("");
                    CampoNombre.requestFocus();
                } else {
                    JOptionPane.showMessageDialog(null, "Precio Invalido");
                }

            } catch (Exception m) {
                System.out.println(m);
                JOptionPane.showMessageDialog(null, "Precio Invalido");
            }
        } else {
            JOptionPane.showMessageDialog(null, "El campo nombre y precio no deben estar vacios");
        }

    }

    @FXML
    public void Editar() {
        try {
            mem = (Membresia) TablaMembresias.getSelectionModel().getSelectedItem();
            if (!mem.equals(null)) {
                Encabezado.setText("Edicion de Membresia");
                Guardar.setVisible(true);
                Internal.setVisible(true);
                nuevo.setDisable(true);
                editar.setDisable(true);
                eliminar.setDisable(true);
                CampoNombre.setText(mem.getNombre());
                CampoId.setText(mem.getId() + "");
                Campoduracion.getSelectionModel().select((Object) mem.getDuracion());
                tiposcmbbx.getSelectionModel().select(mem.getIdTipoduracion());
                CampoPrecio.setText(mem.getCosto() + "");
            } else {
                JOptionPane.showMessageDialog(null, "Seleccione un producto");
            }
        } catch (Exception f) {
            System.out.println(f);
        }
    }

    @FXML
    public void Nuevo() {
        try {
            Encabezado.setText("Agregar Membresia");
            Agregar.setVisible(true);
            Internal.setVisible(true);
            nuevo.setDisable(true);
            editar.setDisable(true);
            eliminar.setDisable(true);
        } catch (Exception f) {
            System.out.println(f);
        }
    }

    @FXML
    public void Cancelar() {
        CampoId.setText("");
        CampoNombre.setText("");
        Encabezado.setText(null);
        Agregar.setVisible(false);
        Guardar.setVisible(false);
        Internal.setVisible(false);
        nuevo.setDisable(false);
        editar.setDisable(false);
        eliminar.setDisable(false);
    }

    @FXML
    public void oEliminar() {
        try {
            Membresia c = (Membresia) TablaMembresias.getSelectionModel().getSelectedItem();
            System.out.println(c);
            int x = JOptionPane.showConfirmDialog(null, "¿¿Esta Ud. Seguro que desea ELIMINAR el Producto??");
            if (x == 0) {
                MembresiaLnLocal membresialn = new MembresiaLN();
                System.out.println("borrando a " + c);
                membresialn.eliminar(c);
                System.out.println("borrado");
                actualizarLsita();
            }
        } catch (Exception f) {
            System.out.println(f);
        }
    }

    public void buscar() {
        MembresiaLnLocal membresiaLnLocal = new MembresiaLN();
        try {
            String criterio = criterioBusqueda.getText();
            if (membresiaLnLocal.getBusqueda(criterio).isEmpty()) {
                //JOptionPane.showMessageDialog(null, "No hay Coincidencias"); //cambiar por ventana de mensaje personalizada JFX
                System.out.println("No Encontrado");
            } else {
                System.out.println("Encontrado");
                

                    TableColumn ID = new TableColumn("ID");
                    ID.setCellValueFactory(
                            new PropertyValueFactory<Membresia, String>("id"));

                    TableColumn Nombre = new TableColumn("Nombre");
                    Nombre.setCellValueFactory(
                            new PropertyValueFactory<Membresia, String>("nombre"));
                    Nombre.setPrefWidth(200);

                    TableColumn Duracion = new TableColumn("Duracion");
                    Duracion.setCellValueFactory(
                            new PropertyValueFactory<Membresia, String>("duracion"));
                    Duracion.setPrefWidth(200);

                    TableColumn Tipo = new TableColumn("Tipo");
                    Tipo.setCellValueFactory(
                            new PropertyValueFactory<Membresia, String>("idTipoduracion"));
                    Tipo.setPrefWidth(200);

                    TableColumn Costo = new TableColumn("Costo");
                    Costo.setCellValueFactory(
                            new PropertyValueFactory<Membresia, String>("costo"));
                    Costo.setPrefWidth(200);

                    TableColumn Creada = new TableColumn("Fecha");
                    Creada.setCellValueFactory(
                            new PropertyValueFactory<Membresia, String>("fechaCreacion"));
                    Creada.setPrefWidth(200);
                    ObservableList<Membresia> k = FXCollections.observableArrayList(membresiaLnLocal.getBusqueda(criterio));
                    TablaMembresias.setItems(k);
                    TablaMembresias.getColumns().setAll(ID, Nombre,Tipo, Duracion, Costo, Creada);
                
            }
        } catch (Exception ex) {
            System.out.println(ex);
            System.out.println("No Encontrado");
        }

    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        actualizarLsita();
        TipoDuracionLnLocal tdll = new TipoDuracionLN();
        ObservableList<Tipoduracion> k = FXCollections.observableArrayList(tdll.getList());
        tiposcmbbx.setItems(k);
        ObservableList<Integer> o = FXCollections.observableArrayList(Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6}));
        Campoduracion.setItems(o);
    }
}
